home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / docs / mags / saku09.lha / Teksti / Demot.txt < prev    next >
Text File  |  1994-10-20  |  9KB  |  198 lines

  1. 5
  2. 1*
  3.  
  4. {3                    Resepti ympäristöystävälliselle demolle
  5. {3                    ---------------------------------------
  6.  
  7.                                  Aki Laukkanen
  8.   
  9.  
  10. Muistatteko parin vuoden takaiset ajat, jolloin demon saaminen toimimaan  omalla
  11. koneellasi oli suoranainen ihme? Tuolloin demot oli suunniteltu vain yhdelle ko-
  12. koonpanolle: A500 + 0.5MB CHIP-muistia. Jos  oma  kokoonpanosi  poikkesi  kysei-
  13. sestä, sait useimmissa tapauksissa unohtaa demon kokeilemisen. Syitä oli  monia:
  14. itseään muuttava koodi, tiettyyn osoitteeseen käännetty tai tiettyä muistialuet-
  15. ta suoraan ilman varaamista osoittava koodi, osoiterekisterien ylimpien  bittien
  16. käyttäminen datana, busy-looppien käyttäminen ajoitukseen, kaikenlaiset  oletuk-
  17. set koneen tilasta ja nopeudesta jne. Luetteloa voisi jatkaa loputtomiin.  Miten
  18. nykypäivinä?
  19.  
  20. Nykyään konekokoonpanoihin on tullut vain lisää variaatiota: AGA tuli  sotkemaan
  21. asioita loppuvuodesta 1992 uuden käyttöjärjestelmän ja uusien prosessorien kera.
  22. Oli luonnollista ajatella, etteivät vanhat demot toimi uusissa  koneissa.  Eihän
  23. silloin voitu edes varautua tuleviin muutoksiin Commodoren (R.I.P.) nihkeän  po-
  24. litiikan vuoksi. Ajat muuttuivat, ja uudeksi "jokamiehen kokoonpanoksi"  vakiin-
  25. tui A1200 ja ehkä jonkin verran FAST-muistia, joten demotkin alkoivat luonnolli-
  26. sesti hyödyntää em. kokoonpanoa. Mutta mihin jäivät muut koneet ja kokoonpanot?
  27. Ilmeisesti osalle koodereista ovat VGA-  ja  multisync-monitorit  tuntemattomia.
  28. Näin ollen ei voida pitää varmana, että käytössä oleva näyttömoodi  demoa  käyn-
  29. nistettäessä olisi PAL High Res. Jos näyttömoodi "sattumalta" onkin joku toinen,
  30. kuten MULTISCAN tai DBLPAL, ei kone osaa tulkita copperlistiä oikein, vaan  seu-
  31. rauksena on pikselien sekasotku.  Oikea  ratkaisu  olisi  ollut  LoadView(NULL);
  32. WaitTOF(); WaitTOF(); -kutsusarja, jota onneksi yhä useammat kooderit ovat alka-
  33. neet käyttää. Tämä näkyy esimerkiksi verrattaessa The Party  III:n  ja  Assembly
  34. '94:n  demoja.  Jälkimmäisistä  huomattavasti  suurempi  osa   toimii   "systee-
  35. miystävällisemmin".
  36.  
  37. Edelleen tuntematon näyttää olevan 68040-prosessori, erityisesti sen  Writeback-
  38. cachet. Käytössä olevan prosessorinhan saa tietää ExecBasen  AttnFlags-kentästä.
  39. Kyseisen kentän bittien merkitykset on selostettu Exec/execbase.i-tiedostossa.
  40.  
  41. Kolmas skenaario toteutuu,  jos  onneton  käyttäjä  yrittää  kokeilla  AGA-demoa
  42. ECS/OCS-koneessa. Jotkut demot eivät testaa piirisarjaa, vaan yrittävät  käyttää
  43. AGA-rekistereitä ja muita  uusia  ominaisuuksia  -  jälleen  seuraa  ilotulitus.
  44. Käytetyn apuprosessorisetin voi tarkistaa monella tavalla.  Yksinkertainen  tapa
  45. on GfxBase:n ChipRevBits0-kenttä.  Mahdolliset  bittiyhdistelmät  on  selostettu
  46. graphics/gfxbase.i- tiedostossa. On kuitenkin muistettava, että kenttä  otettiin
  47. käyttöön vasta Kickstart V39:ssä. Toinen tapa on katsoa suoraan LISAID- rekiste-
  48. riä ($dff07c). Rekisteri otettiin kuitenkin käyttöön  vasta  ECS:ssä,  joten  on
  49. huolehdittava, että väylällä on joku tietty luku esim.  kirjoittamalla  johonkin
  50. hardware-rekisteriin. (Kiitokset tiedosta Sami  Klemolalle.)  Mahdolliset  vaih-
  51. toehdot ovat $fc (ECS Denise), $f8 (AGA Lisa) tai viimeksi väylällä  ollut  luku
  52. (OCS Denise). Tietysti on myös muistettava mahdolliset tulevat  apuprosessorise-
  53. tit kuten AAA ja Hombre. Toisaalta, jos prosessorina on HP PA-Risc, niin mahdol-
  54. lisista oletuksista ei liene hyötyä?-)
  55.  
  56. Muitakin seikkoja on toki muistettava. Nykyisinhän ovat monet demot  WB-käynnis-
  57. tettäviä, eli niillä on oma ikoni. Tällaisen  ohjelman  täytyy  muistaa  vastata
  58. WBenchMsg:een ohjelmasta poistuttaessa, jotta Workbench voi vapauttaa sen vaati-
  59. man muistin. Lisäksi olisi syytä osata disabloida käyttöjärjestelmä oikein  Exe-
  60. cin Disable()-rutiinilla.
  61.  
  62. PS. Artikkelin ohella olen tehnyt pienen koodinpätkän, joka tarkistaa  prosesso-
  63. rin ja apurosessorit, osaa vastata WBenchMsg:hen, tallettaa vanhan Viewin ja te-
  64. kee muiden näyttötilojen käytön mahdolliseksi.  Lisäksi  se  disabloi  moniajon.
  65. Mahdolliset testien tulokset ohjelmanpätkä jättää pääohjelman tutkittavaksi. Ot-
  66. takaa huomioon, että sitä ei ole testattu eikä optimoitu mitenkään, joten se  ei
  67. _varmastikaan_ ole paras tapa tehdä asiat. 
  68.  
  69.         include "exec/types.i"
  70.         include "libraries/dosextens.i"
  71.         include "graphics/gfxbase.i"
  72.         include "exec/libraries.i"
  73.         include "exec/execbase.i"
  74.  
  75.         xref    _LVOFindTask
  76.         xref    _LVOWaitPort
  77.         xref    _LVOForbid
  78.         xref    _LVOGetMsg
  79.         xref    _LVOReplyMsg
  80.         xref    _LVODisable
  81.         xref    _LVOEnable
  82.         xref    _LVOOpenLibrary
  83.         xref    _LVOCloseLibrary
  84.  
  85.         xref    _LVOLoadView
  86.         xref    _LVOWaitTOF
  87.  
  88. NOCHIPREV equ 0
  89.  
  90.         SECTION CODE,code
  91.  
  92. startup:
  93.         movem.l d0/a0,-(sp)             ; Tallennetaan d0 ja a0
  94.         move.l  4,a6                    ; SysBase
  95.         move.l  #0,a1
  96.         jsr     _LVOFindTask(a6)        ; Haetaan oma prosessi
  97.                                         ; jsr -$0126(a6)
  98.         move.l  d0,a4
  99.         move.l  d0,process
  100.         tst.l   pr_CLI(a4)              ; CLI?
  101.                                         ; tst.l $ac(a4)
  102.         bne.s   check_aga               ; jos CLI niin check_aga
  103. wb:
  104.         lea     pr_MsgPort(a4),a0       ; Haetaan prosessin viestiportti
  105.                                         ; lea $5c(a4),a0
  106.         jsr     _LVOWaitPort(a6)        ; Odotetaan viestiä
  107.                                         ; jsr -$0180(a6)
  108.         lea     pr_MsgPort(a4),a0
  109.         jsr     _LVOGetMsg(a6)          ; Haetaan viesti
  110.                                         ; jsr -$0174(a6)
  111.         move.l  d0,wbenchmsg            ; tallennetaan ohjelman tarvetta
  112.                                         ; varten
  113. check_aga:
  114.         moveq   #0,d0
  115.         lea     gfxname,a1              ; avataan
  116.         jsr     _LVOOpenLibrary(a6)     ; graphics.library
  117.                                         ; jsr -$0228(a6)
  118.         move.l  d0,gfxbase
  119.         beq.w   reply_to_wb             ; jostain syystä ei saatu avattua
  120.         move.l  d0,a4
  121.  
  122.         jsr     _LVODisable(a6)         ; keskeytykset pois
  123.                                         ; jsr -$0078(a6)
  124.         cmp.w   #39,LIB_VERSION(a4)     ; onko ChipRevBits0 määritelty
  125.                                         ; cmp.w #39,$14(a4)
  126.         bne.s   no_chiprev
  127.  
  128.         move.b  gb_ChipRevBits0(a4),chiprev
  129.                                         ; move.b $ec(a4),chiprev
  130.         bra.s   check_proc
  131. no_chiprev:
  132.         move.b  #NOCHIPREV,chiprev      ; Ei pystyta hakemaan ChipRevBits:ia
  133. check_proc:
  134.         move.w  AttnFlags(a6),processor ; CPU ja FPU
  135.                                         ; move.w $128(a6),processor
  136. clear_view:
  137.         move.l  gfxbase,a6
  138.         move.l  gb_ActiView(a6),oldview ; nykyinen View talteen
  139.                                         ; move.l $22(a6),oldview
  140.         move.l  #0,a1                   ; NULL View tilalle
  141.         jsr     _LVOLoadView(a6)        ; jsr -$00de(a6)
  142.  
  143.         jsr     _LVOWaitTOF(a6)         ; jsr -$010e(a6)
  144.         jsr     _LVOWaitTOF(a6)
  145.  
  146.         move.l  4,a6                    ; SysBase valmiiksi
  147.         movem.l (sp)+,d0/a0             ; d0/a0 pois pinosta
  148.         bsr.s   _main                   ; hypätään pääohjelmaan
  149.         move.l  d0,-(sp)                ; palautuskoodi turvaan
  150. old_view:
  151.         move.l  gfxbase,a6
  152.         move.l  oldview,a1              ; vanha View
  153.         jsr     _LVOLoadView(a6)        ; jsr -$00de(a6)
  154.  
  155.         move.l  4,a6                    ; jsr -$007e(a6)
  156.         jsr     _LVOEnable(a6)          ; keskeytykset päälle
  157.  
  158.         move.l  a6,a1                   ; suljetaan graphics.library
  159.         jsr     _LVOCloseLibrary(a6)    ; jsr -$019e(a6)
  160.  
  161. reply_to_wb:
  162.         tst.l   wbenchmsg               ; onko workbench
  163.         beq.s   exit                    ; jos ei niin exit
  164.         jsr     _LVOForbid(a6)          ; huomaa ettei tarvitse Permit()
  165.                                         ; jsr -$0084(a6)
  166.         move.l  wbenchmsg,a1
  167.         jsr     _LVOReplyMsg(a6)        ; jsr -$017a(a6)
  168. exit:
  169.         move.l  (sp)+,d0
  170.         rts                             ; poistutaan ohjelmasta
  171.  
  172. _main:  moveq   #0,d0                   ; palautuskoodi
  173.         rts                             ; pääohjelma
  174.  
  175.  
  176.         SECTION DATA,data
  177.  
  178. wbenchmsg       dc.l    0
  179. oldview         dc.l    0
  180. process         dc.l    0
  181. gfxbase         dc.l    0
  182. processor       dc.w    0               ; AFB_68010 equ 0
  183.                                         ; AFB_68020 equ 1
  184.                                         ; AFB_68030 equ 2
  185.                                         ; AFB_68040 equ 3
  186.                                         ; AFB_68881 equ 4
  187.                                         ; AFB_68882 equ 5
  188.                                         ; AFB_FPU40 equ 6
  189.                                         ; AFB_68060 equ 7
  190. chiprev         dc.b    0               ; GFXB_BIG_BLITS equ 0
  191.                                         ; GFXB_HR_AGNUS  equ 0
  192.                                         ; GFXB_HR_DENISE equ 1
  193.                                         ; GFXB_AA_ALICE  equ 2
  194.                                         ; GFXB_AA_LISA   equ 3
  195. gfxname         dc.b    'graphics.library',0
  196.  
  197.         end
  198.